package co.edu.udea.lab.iu.client;

import java.util.List;

import co.edu.udea.lab.iu.shared.GWTLaboratorioException;
import co.edu.udea.lab.iu.shared.dto.DispositivoGWT;
import co.edu.udea.lab.util.exception.LabBLException;
import co.edu.udea.lab.util.exception.LabDAOException;

import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;

@RemoteServiceRelativePath("DispositivoService")
public interface DispositivoService extends RemoteService{
	
	public static class Util {
		private static DispositivoServiceAsync instance;
		public static DispositivoServiceAsync getInstance(){
			if (instance == null) {
				instance = GWT.create(DispositivoService.class);
			}	
			return instance;
		}
	}
	
	/**
	 * Entrega la lista de todos los dispostivos existentes en la base de datos
	 * @return Lista con todos los dispositivos en la base de datos
	 * @throws LabDAOException en caso de ocurrir errores con los DAO, al hacer la consulta de la lista
	 * @throws LabBLException en caso de ocurrir errores con los resultados obtenidos
	 */
	List<DispositivoGWT> obtenerTodos() throws GWTLaboratorioException;
	/**
	 * Entrega la lista de todos los dispostivos existentes segun un estado, disponibles o en prestamo
	 * @param estado determina el estado del que se espera recibir la lista de dispositivos
	 * @return Lista con todos los dispositivos en la base de datos que cumplen el criterio
	 * @throws LabDAOException en caso de ocurrir errores con los DAO, al hacer la consulta de la lista
	 * @throws LabBLException en caso de ocurrir errores con los resultados obtenidos
	 */
	List<DispositivoGWT> obtenerTodos(String estado) throws GWTLaboratorioException;

}
